//雨滴传感器接口文件。
#include <stdio.h>      // 标准输入输出
#include <unistd.h>     // POSIX标准接口

#include "ohos_init.h"  // 用于初始化服务(services)和功能(features)
#include "cmsis_os2.h"  // CMSIS-RTOS API V2

#include "iot_gpio.h"   // OpenHarmony HAL：IoT硬件设备操作接口-GPIO
#include "hi_io.h"      // 海思 Pegasus SDK：IoT硬件设备操作接口-IO
#include "hi_adc.h"     // 海思 Pegasus SDK：IoT硬件设备操作接口-ADC

// 定义一个宏，用于标识ADC4通道（雨滴传感器）
#define RAIN_SENSOR_CHAN_NAME HI_ADC_CHANNEL_3//GPIO_07

// 将ADC值转换为电压值
static float ConvertToVoltage(unsigned short data)
{
    return (float)data * 1.8 * 4 / 4096;
}

//判断是否有雨滴以及雨滴大小
float GetRainLevel()
{
    // 用于接收雨滴传感器的值
    unsigned short data = 0;
    
    // 读取ADC4通道的值
    if (hi_adc_read(RAIN_SENSOR_CHAN_NAME, &data, HI_ADC_EQU_MODEL_4,
                    HI_ADC_CUR_BAIS_DEFAULT, 0) == HI_ERR_SUCCESS)
    {
        // 传感器上有雨滴 -> 雨滴传感器的电阻值降低 -> ADC通道的电压增大
        // 转换为电压值
        float Vx = ConvertToVoltage(data);

        float rainSensorResistance = 5 / Vx - 1;

        // 日志输出ADC值、电阻值
        printf("ADC_VALUE = %d, rainSensorResistance = %f\n", data, rainSensorResistance);

        // 返回雨滴传感器的电阻值
        return rainSensorResistance;
    }

    // 读取失败返回0
    return 0;
}